/*
 * funcionesCintasR14.h
 *
 *  Created on: 01/12/2013
 *      Author: gonzalo
 */

#include "funcionesR11-R14.h"

using ipc::CPrinter;


void avanzarProductoCintaA(Producto prod)
{
    ControladorR11A controlador;

    ICinta13A *cinta13A;
    IRobot11A *robot11A;
    IRobot14  *robot14;

    cinta13A = &controlador;
    robot11A = &controlador;
    robot14  = &controlador;

    int sleepTime;
    bool puedeDepositar;

    CPrinter::setHeader("R11A");

    srand( getpid() );

    // Simulo tiempo para depositar el prod
    CPrinter::printOut( "Intentando depositar el prod %d",
            prod.productoId );

    bool depositoOk = cinta13A->depositar( prod );

    if ( !depositoOk )
    {
        CPrinter::printOut( "No se pudo depositar, esperando espacio vacio" );
        robot11A->esperarEspacioVacio();

        cinta13A->depositar( prod );
    }

    sleepTime = SLEEP_DEPOSITAR_ELEMENTO;
    CPrinter::printOut( "Depositando Elemento: %d en la cinta 13A,"
            " durante: %ds", prod.productoId, sleepTime );
    sleep( sleepTime );

    if ( cinta13A->avanzar() )
    {
        sleepTime = SLEEP_AVANZAR_CINTA;
        CPrinter::printOut( "Avanzando la cinta 13A durante: %ds",
                sleepTime );
        sleep( sleepTime );
    }

    robot14->notificarNuevoElemento();
}

void avanzarProductoCintaB(Producto prod)
{
    ControladorR11B controlador;

    ICinta13B *cinta13B;
    IRobot11B *robot11B;
    IRobot14  *robot14;

    cinta13B = &controlador;
    robot11B = &controlador;
    robot14  = &controlador;

    int sleepTime;
    bool puedeDepositar;

    CPrinter::setHeader("R11B");

    srand( getpid() );

    // Simulo tiempo para depositar el prod
    CPrinter::printOut( "Intentando depositar el prod %d",
            prod.productoId );

    bool depositoOk = cinta13B->depositar( prod );

    if ( !depositoOk )
    {
        CPrinter::printOut( "No se pudo depositar, esperando espacio vacio" );
        robot11B->esperarEspacioVacio();

        cinta13B->depositar( prod );
    }

    sleepTime = SLEEP_DEPOSITAR_ELEMENTO;
    CPrinter::printOut( "Depositando Elemento: %d en la cinta 13A,"
                    " durante: %ds", prod.productoId, sleepTime );
    sleep( sleepTime );

    if ( cinta13B->avanzar() )
    {
        sleepTime = SLEEP_AVANZAR_CINTA;
        CPrinter::printOut( "Avanzando la cinta 13B durante: %ds",
                sleepTime );
        sleep( sleepTime );
    }

    robot14->notificarNuevoElemento();
}
